import csv

from py2neo import Graph, Node, NodeMatcher
# from neo4j import GraphDatabase
graph = Graph(" http://localhost:7474/",auth=("neo4j","Xiyou666"))
# 删除知识图谱中所有节点
# graph.delete_all()

rcsv = open('data/data3.csv', 'r', encoding="utf-8")
reader = csv.reader(rcsv)
data = list(reader)

rcsv = open('data/data2.csv', 'r', encoding="utf-8")
reader = csv.reader(rcsv)
data1 = list(reader)


#创建前端的技能节点  统一标签是SKills

#只需要读取文件的内容 跟job节点一样的 创建过程
"""
for i in range(1, len(data1)):
    Skills = Node('Skills', name=data1[i][1],)
    graph.create(Skills)
"""
#注意这个要放在这里  不要放在循环里面
for j in range(1, len(data1)):
    Skills = Node('Skills_job', name=data1[j][1], job=data1[j][0])
    graph.create(Skills)

    # 创建job节点 并且和skills创建关系
for i in range(1, len(data)):
    job = Node('jobs', id=data[i][0], company=data[i][1], name=data[i][2], salary=data[i][3], education=data[i][4],
               description=data[i][5], hiring_manager=data[i][6], last_active=data[i][7], address=data[i][8],
               link=data[i][9])
    graph.create(job)
    #这个查询语句的作用是查询所有的job节点
    query2 = """
      Match (n:jobs) 
      return properties(n) AS properties,ID(n) as id, labels(n) AS label
    """
    #查找到了就可以找对应节点的属性了
    result2 = graph.run(query2).data()
    # print(result2[0]['properties']['id'])
    a = result2[i-1]['properties']['name']
    b = result2[i-1]['properties']['id']
    #遍历技能
    for j in range(1, len(data1)):
        #Skills = Node('Skills', name=data1[j][1], job=data1[j][0])
        #graph.create(Skills)
        query2 = """
                  Match (n:Skills_job) 
                  return properties(n) AS properties,ID(n) as id, labels(n) AS label
                """
        result2 = graph.run(query2).data()
        # print(result2[0]['properties']['id'])
        c = result2[j-1]['properties']['job']
        query5 = """
                   MATCH (job:jobs {id: $id})
                   MATCH (Skills:Skills_job {job: $job})
                   MERGE (job)-[:NEEDS]->(Skills)
        """
        if ('前端' in a or 'Web' in a ) and ('前端' in c   ):
            # 注意 这里的参数我用的job 而不是skills节点的name
            graph.run(query5, id=b, job=c)
        if ('java工程师' in a or  'Java工程师' in a) and ('java工程师' in c):
                  graph.run(query5, id=b, job=c)
        if ('算法' in a ) and ('算法' in c):
            # 注意 这里的参数我用的job 而不是skills节点的name
            graph.run(query5, id=b, job=c)
        if ('运维工程师' in a or '运维' in a ) and ('运维工程师' in c):
            # 注意 这里的参数我用的job 而不是skills节点的name
            graph.run(query5, id=b, job=c)
        if ('测试' in a ) and ('测试' in c):
            # 注意 这里的参数我用的job 而不是skills节点的name
            graph.run(query5, id=b, job=c)
        if ('PHP' in a ) and ('PHP' in c):
            # 注意 这里的参数我用的job 而不是skills节点的name
            graph.run(query5, id=b, job=c)
        if ('Linux' in a ) and ('Linux' in c):
            # 注意 这里的参数我用的job 而不是skills节点的name
            graph.run(query5, id=b, job=c)
        if ('安卓' in a ) and ('安卓' in c):
            # 注意 这里的参数我用的job 而不是skills节点的name
            graph.run(query5, id=b, job=c)
        if ('python' in a ) and ('python' in c):
            # 注意 这里的参数我用的job 而不是skills节点的name
            graph.run(query5, id=b, job=c)
        if ('后端' in a ) and ('后端' in c):
            # 注意 这里的参数我用的job 而不是skills节点的name
            graph.run(query5, id=b, job=c)
        if ('测试' in a ) and ('测试' in c):
            # 注意 这里的参数我用的job 而不是skills节点的name
            graph.run(query5, id=b, job=c)
        if ('测试' in a ) and ('测试' in c):
            # 注意 这里的参数我用的job 而不是skills节点的name
            graph.run(query5, id=b, job=c)
        if ('golang' in a or 'Golang' in a) and ('Golong' in c):
            # 注意 这里的参数我用的job 而不是skills节点的name
            graph.run(query5, id=b, job=c)
        if ('硬件' in a ) and ('硬件' in c):
            # 注意 这里的参数我用的job 而不是skills节点的name
            graph.run(query5, id=b, job=c)
        if ('网络维护' in a ) and ('网络维护' in c):
            # 注意 这里的参数我用的job 而不是skills节点的name
            graph.run(query5, id=b, job=c)
        if ('C#' in a  or 'c#' in a ) and ('C#' in c):
            # 注意 这里的参数我用的job 而不是skills节点的name
            graph.run(query5, id=b, job=c)
        if ('C++' in a or 'c++' in a) and ('C++' in c):
            # 注意 这里的参数我用的job 而不是skills节点的name
            graph.run(query5, id=b, job=c)
        if ('软件工程师' in a ) and ('软件工程师' in c):
            # 注意 这里的参数我用的job 而不是skills节点的name
            graph.run(query5, id=b, job=c)
        if ('嵌入式' in a ) and ('嵌入式' in c):
            # 注意 这里的参数我用的job 而不是skills节点的name
            graph.run(query5, id=b, job=c)
        if ('人工智能' in a ) and ('人工智能' in c):
            # 注意 这里的参数我用的job 而不是skills节点的name
            graph.run(query5, id=b, job=c)
        if ('网络安全' in a or '安全' in a ) and ('网络安全' in c):
            # 注意 这里的参数我用的job 而不是skills节点的name
            graph.run(query5, id=b, job=c)
        if ('.net' in a ) and ('.net' in c):
            # 注意 这里的参数我用的job 而不是skills节点的name
            graph.run(query5, id=b, job=c)
        if ('视觉工程师' in a ) and ('视觉工程师' in c):
            # 注意 这里的参数我用的job 而不是skills节点的name
            graph.run(query5, id=b, job=c)
        if ('网络工程师' in a ) and ('网络工程师' in c):
            # 注意 这里的参数我用的job 而不是skills节点的name
            graph.run(query5, id=b, job=c)
        if ('软件开发' in a ) and ('软件开发' in c):
            # 注意 这里的参数我用的job 而不是skills节点的name
            graph.run(query5, id=b, job=c)



